home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
ms_dos
/
tool
/
dprint
/
dp_fmenu.c
< prev
next >
Wrap
Text File
|
1995-01-04
|
4KB
|
219 lines
/*
8086|Printman/POSTCARD ファイル操作メニューモジュール
Copyright (c) 1993,94 Delmonta
*/
#include<dos.h>
#include<string.h>
#include<jctype.h>
#include"dprint.h"
/*---------------------------------------------------------------------------*/
bool Changedflag = FALSE;
bool dp_isallsure(void)
{
if (!Changedflag)
return TRUE;
else
{
char c;
isallsure_rep:
c = dp_errmes("カードを保存していません.よろしいですか(y/n):");
if (c=='y' || c=='Y')
return TRUE;
else if (c=='n' || c=='N')
return FALSE;
else
{
if (c==EXTKEY_H)
dp_getch();
putchar('\7');
goto isallsure_rep;
}
}
}
/*---------------------------------------------------------------------------*/
void dp_readfile(FILE *fp)
{
static const char READERROR[] = "読み込みに失敗しました.";
struct POSTCARD readdata;
char buf[256];
unsigned i;
while (1)
{
if (fgets(buf,sizeof(buf),fp)==NULL)
{
if (!feof(fp))
dp_errmes(READERROR);
goto whilebreak;
}
switch (sscanf(buf,"%u-%u",&readdata.zipcode[0],
&readdata.zipcode[1]))
{
case 0: readdata.zipcode[0] = -1; break;
case 1: readdata.zipcode[1] = -1; break;
case -1: goto whilebreak;
}
for (i=0 ; i<5 ; i++)
{
char *p;
if (fgets(buf,sizeof(buf)-1,fp)==NULL)
{
dp_errmes(READERROR);
goto whilebreak;
}
p = strchr(buf,'\n');
if (p!=NULL)
*p = '\0';
if (strlen(buf)>24)
{
if (nthctype(buf,23)==CT_KJ1)
buf[23] = '\0';
else
buf[24] = '\0';
}
strcpy(readdata.data[i],buf);
}
if (!addcard(Cardnum))
goto whilebreak; /* メモリ不足のエラーメッ */
/* セージはaddcard()が出す */
*Card[Cardnum++] = readdata;
}
whilebreak:
fclose(fp);
dp_putcardnum();
card_reshow(63);
}
/*---------------------------------------------------------------------------*/
static void dp_fmergemenu(void)
{
FILE *fp = fileselector("r",NULL);
if (fp!=NULL)
dp_readfile(fp);
Changedflag = TRUE;
}
/*---------------------------------------------------------------------------*/
static void dp_freadmenu(void)
{
FILE *fp;
if (!dp_isallsure())
return;
fp = fileselector("r",NULL);
if (fp!=NULL)
{
while (Cardnum)
farfree(Card[--Cardnum]);
Cardpos = 0;
dp_readfile(fp);
}
Changedflag = FALSE;
}
/*---------------------------------------------------------------------------*/
static void dp_fwritemenu(void)
{
int s,e;
FILE *fp;
fwmenu_rep:
if (!input_st_ed("保存",&s,&e))
return;
fp = fileselector("w",NULL);
if (fp==NULL)
goto fwmenu_rep;
for ( ; s<=e ; s++)
{
struct POSTCARD writedata = *Card[s];
unsigned i;
static const char FWRITE_ERR[] = "書き込み中にエラーが"
"発生しました. 書き込みを中止します.";
if (writedata.zipcode[0] == -1)
i = fprintf(fp," - \n");
else if (writedata.zipcode[1] == -1)
i = fprintf(fp,"%03d- \n",writedata.zipcode[0]);
else
i = fprintf(fp,"%03d-%02d\n",writedata.zipcode[0],
writedata.zipcode[1]);
if (i==-1)
{
dp_errmes(FWRITE_ERR);
goto fwmenu_break;
}
for (i=0 ; i<5 ; i++)
{
if (fprintf(fp,"%s\n",writedata.data[i])==-1)
{
dp_errmes(FWRITE_ERR);
goto fwmenu_break;
}
}
}
dp_errmes("書き込みを終了しました.");
Changedflag = FALSE;
fwmenu_break:
fclose(fp);
}
/*---------------------------------------------------------------------------*/
void dp_filemenu(void)
{
static struct MENUDAT menu[]=
{
{'L',"読み込み","ファイルに保存したカードを読み込みます"},
{'M',"追加読み込み","ファイルに保存したカードを現在のカードに追加します"},
{'S',"保存","カードをファイルに保存します"},
};
int a = dp_menuselect("コマンドを選択してください.",3,menu);
switch (a)
{
case -1: break;
case 0: dp_freadmenu(); break;
case 1: dp_fmergemenu(); break;
case 2: dp_fwritemenu(); break;
}
}